package com.liujun.io.nio.mysql.bean.protocol.result;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.liujun.io.nio.mysql.bean.protocol.PackageHeader;
import com.liujun.io.nio.mysql.protocol.comm.MySQLMessage;
import com.liujun.io.nio.mysql.protocol.inf.DataParseInf;

/**
 * MySQL 4.1 及之后的版本
结构  说明
[Result Set Header] 列数量
[Field] 列信息（多个）
[EOF]   列结束
[Row Data]  行数据（多个）
[EOF]   数据结束
* 源文件名：FieldPackageBean.java
* 文件版本：1.0.0
* 创建作者：liujun
* 创建日期：2016年12月14日
* 修改作者：liujun
* 修改日期：2016年12月14日
* 文件描述：TODO
* 版权所有：Copyright 2016 zjhz, Inc. All Rights Reserved.
*/
public class RowDataPackageBean extends PackageHeader implements DataParseInf<RowDataPackageBean> {

    /**
     * 列数量
    * @字段说明 columnNum
    */
    private int columnNum;

    /**
     * 列的值
    * @字段说明 fieldValue
    */
    private final List<byte[]> fieldValue;

    public RowDataPackageBean(int columnNum) {
        super();
        this.columnNum = columnNum;
        // 固定列长度
        this.fieldValue = new ArrayList<>(columnNum);
    }

    @Override
    public RowDataPackageBean readPackage(ByteBuffer buffer) {
        MySQLMessage mm = new MySQLMessage(buffer);
        // 包大小
        this.length = mm.readUB3();
        // 序列值
        this.seq = mm.read();

        // 填充列数据的值信息
        for (int i = 0; i < columnNum; i++) {
            fieldValue.add(mm.readBytesWithLength());
        }

        return this;
    }

    @Override
    public ByteBuffer getWriteToPackage(Map<String, Object> param) {
        return null;
    }

    @Override
    public int getpackageSize() {
        return 0;
    }

    public int getColumnNum() {
        return columnNum;
    }

    public void setColumnNum(int columnNum) {
        this.columnNum = columnNum;
    }

    public List<byte[]> getFieldValue() {
        return fieldValue;
    }

}
